/**
 * 简谱打谱软件 - 本地存储模块
 */

// 保存项目到本地存储
function saveProject(project) {
  // 从本地存储获取现有项目
  let projects = JSON.parse(localStorage.getItem('sheetMusicProjects') || '[]');
  
  // 检查项目是否已存在
  const projectIndex = projects.findIndex(p => p.id === project.id);
  
  if (projectIndex !== -1) {
    // 更新现有项目
    projects[projectIndex] = { ...project, updatedAt: new Date().toISOString() };
  } else {
    // 添加新项目
    projects.push({ ...project, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() });
  }
  
  // 保存到本地存储
  localStorage.setItem('sheetMusicProjects', JSON.stringify(projects));
}

// 加载所有保存的项目
function loadSavedProjects() {
  return JSON.parse(localStorage.getItem('sheetMusicProjects') || '[]');
}

// 导出项目为文件
function exportProjectToFile(projectId) {
  const projects = loadSavedProjects() || [];
  const project = projects.find(p => p.id === projectId);
  
  if (!project) {
    showNotification('项目不存在！', 'error');
    return;
  }
  
  // 创建JSON文件
  const jsonContent = JSON.stringify(project, null, 2);
  const blob = new Blob([jsonContent], { type: 'application/json' });
  const url = URL.createObjectURL(blob);
  
  // 创建下载链接
  const a = document.createElement('a');
  a.href = url;
  a.download = `${project.name || 'project'}.json`;
  document.body.appendChild(a);
  a.click();
  
  // 清理
  setTimeout(() => {
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  }, 100);
}

// 解析XML格式的项目
function parseXmlProject(xmlContent) {
  try {
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');
    
    // 解析项目信息
    const projectName = xmlDoc.querySelector('project name')?.textContent || '未命名项目';
    const projectDescription = xmlDoc.querySelector('project description')?.textContent || '';
    
    // 解析元数据
    const metadataNode = xmlDoc.querySelector('metadata');
    const metadata = {
      title: metadataNode?.querySelector('title')?.textContent || '',
      composer: metadataNode?.querySelector('composer')?.textContent || '',
      lyricist: metadataNode?.querySelector('lyricist')?.textContent || '',
      keySignature: metadataNode?.querySelector('keySignature')?.textContent || 'C',
      timeSignature: metadataNode?.querySelector('timeSignature')?.textContent || '4/4',
      tempo: metadataNode?.querySelector('tempo')?.textContent || 120
    };
    
    // 解析小节
    const barNodes = xmlDoc.querySelectorAll('bars bar');
    const bars = Array.from(barNodes).map(barNode => {
      const noteNodes = barNode.querySelectorAll('note');
      return Array.from(noteNodes).map(noteNode => noteNode.textContent);
    });
    
    // 解析歌词
    const lyricNodes = xmlDoc.querySelectorAll('lyrics line');
    const lyrics = Array.from(lyricNodes).map(lineNode => lineNode.textContent);
    
    // 返回项目数据
    return {
      id: Date.now().toString(),
      name: projectName,
      description: projectDescription,
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString(),
      data: {
        metadata,
        bars,
        lyrics
      }
    };
  } catch (error) {
    console.error('解析XML失败:', error);
    throw new Error('XML格式不正确');
  }
}

// 解析文本格式的项目
function parseTextProject(textContent) {
  try {
    // 简单的文本格式解析
    // 格式约定:
    // 第一行: 标题
    // 第二行: 作曲者
    // 第三行: 作词者
    // 第四行: 调号
    // 第五行: 拍号
    // 第六行: 速度
    // 空行后: 小节，每行一个小节，音符用空格分隔
    // 再空行后: 歌词，每行一句
    
    const lines = textContent.split('\n').map(line => line.trim());
    
    // 解析元数据
    const metadata = {
      title: lines[0] || '',
      composer: lines[1] || '',
      lyricist: lines[2] || '',
      keySignature: lines[3] || 'C',
      timeSignature: lines[4] || '4/4',
      tempo: parseInt(lines[5]) || 120
    };
    
    // 找到小节开始的位置
    let barsStartIndex = 6;
    while (barsStartIndex < lines.length && lines[barsStartIndex] === '') {
      barsStartIndex++;
    }
    
    // 解析小节
    let barsEndIndex = barsStartIndex;
    while (barsEndIndex < lines.length && lines[barsEndIndex] !== '') {
      barsEndIndex++;
    }
    
    const bars = lines.slice(barsStartIndex, barsEndIndex).map(line => 
      line.split(' ').filter(note => note.trim() !== '')
    );
    
    // 解析歌词
    let lyricsStartIndex = barsEndIndex;
    while (lyricsStartIndex < lines.length && lines[lyricsStartIndex] === '') {
      lyricsStartIndex++;
    }
    
    const lyrics = lines.slice(lyricsStartIndex).filter(line => line.trim() !== '');
    
    // 返回项目数据
    return {
      id: Date.now().toString(),
      name: metadata.title || '未命名项目',
      description: '',
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString(),
      data: {
        metadata,
        bars,
        lyrics
      }
    };
  } catch (error) {
    console.error('解析文本失败:', error);
    throw new Error('文本格式不正确');
  }
}

// 导入项目
function importProject(projectData) {
  // 保存导入的项目
  saveProject(projectData);
  
  // 加载项目
  loadProject(projectData.id);
}
    